2013/05/16

情境感知應用實作架構

之前寫過一些「情境感知」(Context Aware)應用的相關介紹(12),其實相關的研究相當多,從系統整合、其中元件的技術,到理論架構都有,也有不少中文的論述(例如資策會的介紹,以及許多的學術論文)。

日前有朋友問到實作方面的問題,所以把過去的一些經驗稍作整理。

基本上,設計一個情境感知的的服務或應用,首先要定義哪些情境需要被感知。這其實是個難度很高的問題,關係到整個服務或應用所提供的價值,屬於「戰略」的層次。要解答這個問題,「使用者中心設計」(user-centered design)的領域有很多不錯的方法可以參考,不過不在這篇文章討論的範圍。

一旦決定了要感知的情境,該如何設計這個機制呢?

以程式開發的觀點,對情境的感知可以視為一個「事件處理機制」(event handling),就像「擊點滑鼠右鍵」、「誤觸筆電的觸控板」,系統要能知道這件事情的發生,並且採取對應的措施。

一個情境被感知到之後,該採取什麼動作(event handler),同樣屬於「為使用者提供價值」的問題,所以這裡我們暫時聚焦在實作「事件聽取機制」(event listener)的基本原則。

要判斷一個事件是不是發生,可以透過幾種方是式處理。一是透過分析找出規則(rule-based),另一種是收集大量的資料讓機器自己學習規則(machine learning),當然實作上更常見的是兩者的混合(hybrid)。

以下是從前的工作筆記,只是基本原則,不見得適用於所有的狀況。

    - EventHandler: Void, do whatever necessary for the context
    - EventListener: Boolean, determine the context is happening or not
      - rule-based:
        - design by hands of experts
      - ML based:
        1. Set up a sensor recording interface
        2. Simulate the context to aware of
        3. Collect sensor data stream, and label each record with "in-context" and "not-in-context"
        4. Train a statistical model for the above data (collected in 3)
        5. Use the trained model as the decision rules in EventListener
      - Hybrid:
        - combining ML with some heuristic rules
  - Fine tuning with usability test


筆者一邊寫這篇,一邊在看 Google I/O 2013 的現場直播,發現新的 Android 已經把 activity recognition 的功能放入系統中,也就是說:android 系統本身就提供了幾種「行動狀態的感知」(靜止,行走,騎自行車,或是開車),開發者不需要再自己設計這幾種情境的事件聽取機制,只要直接呼叫系統功能即可。簡單的說,這篇相當程度是白寫了,真是好樣的, Google!

沒有留言: